package com.yxd.bdmapdemo.utils;

import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Handler;
import android.util.TypedValue;
import android.view.View;

import com.yxd.bdmapdemo.base.App;


/**
 * 作者：yxd on 2016/4/2 21:07
 * 描述：
 */
public class UIUtils {

    /**
     * 获取上下文
     */
    public static Context getContext() {
        return App.mContext;
    }

    /**
     * 得到应用程序的包名
     */
    public static String getPackageName() {
        return getContext().getPackageName();
    }

    /**
     * 得到主线程id
     */
    public static long getMainThreadId() {
        return App.mMainThreadId;
    }

    /**
     * 得到一个主线程的handler
     */
    public static Handler getMainThreadHandler() {
        return App.mHandler;
    }

    /**
     * 安全的执行一个task
     */
    public static void postTaskSafely(Runnable task) {
        long curThreadId = android.os.Process.myTid();
        // 如果当前线程是主线程
        if (curThreadId ==  getMainThreadId()) {
            task.run();
        } else {// 如果当前线程不是主线程
            getMainThreadHandler().post(task);
        }
    }
    /**
     * 安全的执行一个task
     */
    public static void postTaskSafelyDelayed(Runnable task) {
        long curThreadId = android.os.Process.myTid();
        // 如果当前线程是主线程
        if (curThreadId ==  getMainThreadId()) {
            task.run();
        } else {// 如果当前线程不是主线程
            getMainThreadHandler().postDelayed(task,1000);
        }
    }

    public static void postTaskSafelyDelayed(Runnable task, long delayMillis) {
        long curThreadId = android.os.Process.myTid();
        // 如果当前线程是主线程
        if (curThreadId ==  getMainThreadId()) {
            task.run();
        } else {// 如果当前线程不是主线程
            getMainThreadHandler().postDelayed(task,delayMillis);
        }
    }

    /**
     * 在主线程执行一个延时的task
     */
    public static void postTaskDelay(Runnable task, long delayMillis) {
        getMainThreadHandler().postDelayed(task, delayMillis);
    }

    /**
     * 移除主线程里面的一个task
     */
    public static void removeTask(Runnable task) {
        getMainThreadHandler().removeCallbacks(task);
    }


    // /////////////////加载资源文件 ///////////////////////////
    /**
     * 得到resouce对象
     */
    public static Resources getResources() {
        return getContext().getResources();
    }

    /**
     * 得到string.xml中的一个字符串
     */
    public static String getString(int resId) {
        return getResources().getString(resId);
    }

    /**
     * 得到string.xml中的一个字符串,带占位符情况
     */
    public static String getString(int resId, Object... formatArgs) {
        return getResources().getString(resId, formatArgs);
    }

    /**
     * 得到string.xml中的一个字符串数组
     */
    public static String[] getStringArr(int resId) {
        return getResources().getStringArray(resId);
    }

    /**
     * 得到color.xml中的颜色值
     */
    public static int getColor(int colorId) {
        return getResources().getColor(colorId);
    }

    // 获取图片
    public static Drawable getDrawable(int id) {
        return getContext().getResources().getDrawable(id);
    }


    //根据id获取颜色的状态选择器
    public static ColorStateList getColorStateList(int id) {
        return getContext().getResources().getColorStateList(id);
    }
    // 获取尺寸
    public static int getDimen(int id) {
        return getContext().getResources().getDimensionPixelSize(id);// 返回具体像素值
    }

// /////////////////dip和px转换//////////////////////////

    /**
     * dp-->px
     *
     * @param dp
     * @return
     */
    public static int dip2Px(int dp) {
        // px/dp = density;
        float density = getResources().getDisplayMetrics().density;
        System.out.println("density:" + density);
        int px = (int) (dp * density + .5f);
        return px;
    }

    /**
     * 1dp---1px;
     * 1dp---0.75px;
     * 1dp---0.5px;
     * ....
     *
     * @param dp
     * @return
     */
    public static int dp2px(int dp) {
        float density = getContext().getResources().getDisplayMetrics().density;
        return (int) (dp * density + 0.5);
    }

    /**
     * px-->dp
     *
     * @param px
     * @return
     */
    public static int px2Dip(int px) {
        // px/dp = density;
        float density = getResources().getDisplayMetrics().density;
        System.out.println("density:" + density);
        int dp = (int) (px / density + .5f);
        return dp;
    }

    public static int dip2px(float dip) {
        float density = getResources().getDisplayMetrics().density;
        return (int) (dip * density + 0.5f);
    }

    public static float px2dip(int px) {
        float density = getContext().getResources().getDisplayMetrics().density;
        return px / density;
    }

    public static int dpToPx(Resources res, int dp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, res.getDisplayMetrics());
    }

    // /////////////////加载布局文件//////////////////////////
    public static View inflate(int id) {
        return View.inflate(getContext(), id, null);
    }


    //判断是否有网络连接
    public static boolean isNetworkConnected() {
        if (getContext() != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) getContext()
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
            if (mNetworkInfo != null) {
                return mNetworkInfo.isAvailable();
            }
        }
        return false;
    }

}
